#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int myMax(int x, int y) {
  return x > y ? x : y;
}

void displayArray(int *arr, int size, void (*callback)(int)) {
  for (int i = 0; i < size; i++) {
    callback(arr[i]);
  }
}

void printArrayItem(int value) {
  printf("current value = %d\n", value);
}

int getNextRandValue() {
  return rand();
}

void initArrayWithRand(int *arr, int size, int (*initializer)(void)) {
  for (int i=0;i<size;i++) {
    arr[i] = initializer();
  }
}

typedef struct {
  int id;
  char name[10];
} UserInfo;

void swap(int *x, int *y);

void echo(const char *str) {
  printf("%s", str);
}

void main() {
  srand(time(NULL));

  // printf("ptr02 \n");

  int (*p_func)(int, int) = myMax;
  int (*p2)(int, int) = &myMax;

  // int d = (p_func(3, 4), 5);
  // printf("max value: %d \n", d);

  // int nums[] = {1, 2, 5};
  // displayArray(nums, 3, printArrayItem);

  // int arrForInit[5];
  // initArrayWithRand(arrForInit, 5, getNextRandValue);
  // for(int i=0;i<5;i++){
  //   printf("arrForInit[%d] = %d, Address: %d\n",i, arrForInit[i], &arrForInit[i]);
  // }

  // char logInfo[] = "test log  Info";
  // int val = 10;
  // int *ptr_val = &val;
  // printf("ptr_val = %d, address = %d\n", *ptr_val, ptr_val);
  // *ptr_val = 11;
  // printf("change ptr_val = %d, val = %d\n", *ptr_val, val);

  UserInfo userInfo = {1, "test"};

  UserInfo *userInfo2 = &userInfo;
  strcpy(userInfo2->name, "newtest");
  // userInfo2->name = "chan";
  userInfo2->id = 2;
  

  printf("UserInfo %d %s\n", userInfo2->id, userInfo2->name);

  // int x=1,y=2;
  // swap(&x,&y);
  // printf("x=%d,y=%d\n",x,y);

  // void (*p)(const char *str) = echo;
  // echo("echo1\n");
  // p("echo2\n");

  // puts("abc");
  // char input[10];
  // printf("input a str: ");
  // gets(input);
  // puts(input);
  char *file = "D:\\docker\\docker-compose\\eureka\\docker-compose.yml";
  FILE *fp = fopen(file, "rb"); // open file
  fseek(fp, 0, SEEK_END);
  int file_size = ftell(fp);
  rewind(fp);
  printf("size=%d\n", file_size);
  char *str;
  str = (char*)malloc(file_size);
  // str[0] = 'a';
  // rewind(fp);
  // char txt[1000];
	// while((fgets(txt,1000,fp))!=NULL){
	// 	strcat(str,txt);
	// }

  // fseek(fp, 0, SEEK_END);
  // cur = (char*)malloc(file_size*sizeof(char));
  fread(str, sizeof(char), file_size - 1, fp);
  printf("%s\n", str);
  free(str);
  fclose(fp);

}

void swap(int *x, int *y) {
  int t;
  t = *x;
  *x = *y;
  *y = t;
}